package creator.singleton.lazy;

/**
 *  静态内部类方式
 * 静态内部类单例模式中实例由内部类创建，由于 JVM 在加载外部类的过程中, 是不会加载静态内部类的,
 * 只有内部类的属性/方法被调用时才会被加载, 并初始化其静态属性。静态属性由于被 `static` 修饰，保证只被实例化一次，并且严格保证实例化顺序。
 * @author lcy
 * @date 2025/8/12 16:24
 */
public class InnerClassSingleton {

    private InnerClassSingleton(){}

    //对外提供静态方法获取该对象
    public static final InnerClassSingleton getInstance(){
        return InnerClassHolder.INSTANCE;
    }

    /**
     * 下面是为了解决序列化反序列化破解单例模式
     */
    private Object readResolve() {
        return InnerClassHolder.INSTANCE;
    }

    private static class InnerClassHolder{
        private static final InnerClassSingleton INSTANCE = new InnerClassSingleton();
    }

}
